#ifndef FORMJSONVIEW_H
#define FORMJSONVIEW_H

#include "FormBaseWidget.h"
#include "components/myWidgets/CJSONTextEdit.h"
#include "components/myWidgets/JSONTreeView.h"

typedef enum 
{
    SELECT_TEXT_TYPE_SRC  = 0,      // 源文本
    SELECT_TEXT_TYPE_CODE = 1,      // 格式化文本
    SELECT_TEXT_TYPE_TREE = 2       // 树状图
}SELECT_TEXT_TYPE;

class FormJSONView : public BaseFormWidget
{
    Q_OBJECT
public:
    // 构建标签页
    FormJSONView(QWidget *parent = nullptr);
    // 析构标签页
    virtual ~FormJSONView()  {}

private slots:
    // 文本输入框数据给入
    void slt_InsertText(QString &strContext);
    // 拷贝当前数据到剪贴板
    void slt_Transfer();
    // 拷贝当前数据到剪贴板
    void slt_CopySrc2Clipboard();
    // 拷贝当前数据无格式化版本到剪贴板
    void slt_CopyUnformat2Clipboard();
    // 清空当前数据
    void slt_Clear();
    // 展开所有节点
    void slt_ExpandAll();
    // 收起所有节点
    void slt_CollapseAll();
    // 跳转选择内容
    void slt_selectData(int idx);

protected:
    // 变更界面显示比例
    void resizeEvent(QResizeEvent *event);

private:
    // 创建工具栏
    void newToolFunc();
    // 按比例重置列宽
    void resizeWindows();
    // 根据当前选项获取数据
    bool getgetCurTexChanged(std::string &strCurText);

private:
    SELECT_TEXT_TYPE             m_eCurType;         // 当前选择的类型
    QVBoxLayout*            m_pFuncShow;        // 功能输出，包含原始数据、格式化窗口、图形图
    CJSONTextEdit*          m_pTextSrc;         // 源文本
    CJSONTextEdit*          m_pTextCode;        // 文本处理框
    JSONTreeView*           m_pJSONTreeView;    // 树状图

// 按钮和右键操作
    MyPushButton*           m_pBtnTextSrc;      // 源文本
    MyPushButton*           m_pBtnTextCode;     // 格式化文本
    MyPushButton*           m_pBtnTextTree;     // 树状图形式
};

#endif // FORMJSONVIEW_H
